// axios二次封装
import axios from "axios"


// 获取当前环境
// console.log(process.env);

// 创建一个新的axios实例
const instance = axios.create({
    baseURL: process.env.VUE_APP_BASE_URL, // baseURL会在发起请求的时候自动拼接在url前面
    timeout: 20000, // 最大请求超时时间
    headers: { 'isToken': true } // 是否需要Token
});

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // console.log(config);

    // config当前请求信息的所有配置，我们可以在每次请求前判断token是否存在（自动添加到请求），例如花卉，设置token请求头

    // 是否需要设置token
    const isToken = config.headers.isToken === false;

    // 获取token
    let getToken = sessionStorage.getItem("token");
    // 浏览器存在token并且后台返回isToken为true
    if (getToken && !isToken) {
        // 让每个请求都携带token
        config.headers['token'] = getToken;
    }

    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // console.log(response);
    // 对响应数据做点什么
    return response;
}, function (error) {
    // 对响应错误做点什么
    let { response } = error;
    if (response) {
        switch (response.status) {
            case 401:
                // 缺少权限(需要验证用户，一般是指未登录状态)
                alert("需要登录");
                break;
            case 403:
                // 服务器请求拒绝(token过期)
                break;
            case 404:
                // 查找不到该请求地址
                alert("请看api文档");
                break;
            case 409:
                // 错误操作
                break;
            default:
            // 服务器问题
        }
    } else {
        // 服务器崩溃或断网
    }
    return Promise.reject(error);
});

export default instance;